home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 2003 August / MW 8 2003 CD1.iso / Inside Macworld / Product News / gimp-1.2.4.sit / gimp-1.2.4 / plug-ins / perl / examples / windify < prev    next >
Encoding:
Text File  |  2000-03-28  |  2.0 KB  |  69 lines

  1. #!/usr/app/bin/perl
  2.  
  3. eval 'exec /usr/app/bin/perl  -S $0 ${1+"$@"}'
  4.     if 0; # not running under some shell
  5.  
  6. # sent to me by Seth Burgess <sjburges@gimp.org>
  7. # small changes my Marc Lehmann <pcg@goof.com>
  8.  
  9. use Gimp qw(:auto N_ __);
  10. use Gimp::Fu;
  11.  
  12. #Gimp::set_trace(TRACE_CALL);
  13.  
  14. sub windify {
  15.     my ($img, $drawable, $angle, $density, $distance, $wrap) = @_;
  16.     my $oldbg = gimp_palette_get_background();
  17.     my $xsize = gimp_drawable_width($drawable);
  18.     my $ysize = gimp_drawable_height($drawable);
  19.  
  20.     my $out = gimp_image_new($xsize,$ysize,0);
  21.     gimp_palette_set_background([128,128,128]);
  22.     my $windlayer = gimp_layer_new($out,$xsize,$ysize,RGB_IMAGE,"Windlayer",100,NORMAL_MODE);
  23.     gimp_drawable_fill($windlayer, 0);
  24.     gimp_image_add_layer($out,$windlayer,0);
  25.     my $windlayercopy = gimp_layer_copy($windlayer, 1);
  26.     gimp_image_add_layer($out,$windlayercopy,0);
  27.     plug_in_noisify($out,$windlayercopy,0,$density/255,
  28.                                                 $density/255,
  29.                                                 $density/255,1);
  30.  
  31.     plug_in_mblur($out,$windlayercopy,0,15,$angle);
  32.     gimp_layer_set_mode($windlayercopy, 10); # Lighten Only
  33.     gimp_image_merge_visible_layers($out,0);
  34.  
  35. # many thanks to Dov for this suggestion as a workaround to the 
  36. # gimp_image_merge_visible_layers bug
  37.  
  38.     my $newlay = gimp_image_get_active_layer ($out);
  39.     plug_in_displace($img,$drawable,-$distance*cos($angle*180/3.14159),
  40.                                           $distance*sin($angle*180/3.14159),
  41.                       1,1, $newlay,$newlay, $wrap);
  42.     gimp_image_remove_layer($out,$newlay);
  43.     gimp_image_delete ($out);
  44.     gimp_palette_set_background($oldbg);
  45.     gimp_displays_flush();
  46.     
  47.     undef;
  48.     }
  49.  
  50. register
  51.     "windify",
  52.     "Add wind to an image",
  53.     "Blow your image all over :)",
  54.     "Seth Burgess",
  55.     "Seth Burgess <sjburges\@gimp.org>",
  56.     "1998-09-14",
  57.     N_"<Image>/Filters/Distorts/Windify...",
  58.     "*",
  59.     [
  60.      [PF_INT32, "angle", "Wind Angle, 0 is left", 120],
  61.      [PF_INT32, "density", "How Much Is Blown",80],
  62.      [PF_VALUE, "distance", "How Far Its Blown",30],
  63.      [PF_TOGGLE, "smear", "Smear on Edges (or Wrap)",0]
  64.     ],
  65.     \&windify;
  66.  
  67. exit main;
  68.  
  69.